// Package handler
// @Author: zhangdi
// @File: HandlerSend
// @Version: 1.0.0
// @Date: 2023/7/3 18:23
package handler

import (
	"fmt"
	"ideatools/application/core/toast"
	"ideatools/application/db/dbdto"
	"ideatools/application/db/dbservice"
	"ideatools/application/pkgs/mylog"
	"log"
	"math"
	"strings"
	"time"
)

type SendResultInfo struct {
	userContentId uint
	aiContentId   uint
	useTime       float64
	resultText    string
	isError       bool
	ErrorMsg      string
}

// 一次性返回--非面板
func (s *HandlerMessageService) gptSendByOnce() {

	FormatChatContents := GetDoalogChatContents(s.CurrChatUserContent.ChatDialogId)
	if len(FormatChatContents) > 1 {
		FormatChatContents = FormatChatContents[:len(FormatChatContents)-1]
	}

	//设置gpt配置
	SetGptConfig(nil)

	//1
	startTime := time.Now() // 记录开始时间
	log.Printf("send contents :%+v", FormatChatContents)
	resultText, err := GptService.SendContents(FormatChatContents) // 调用GptService的GetText方法获取文本
	endTime := time.Now()                                          // 记录结束时间
	useTime := endTime.Sub(startTime)                              // 计算使用时间
	// 将useTime转换为秒，并保留两位小数
	useTimeSeconds := useTime.Seconds()
	useTimeFloat := math.Round(useTimeSeconds*100) / 100

	mylog.Debug(fmt.Sprintf("useTime %v-%v=%v", startTime, endTime, useTime))

	isError := false
	ErrInfo := ""

	if err != nil {
		s.IsHandingTask = false
		isError = true
		mylog.Error(err.Error())
		ErrInfo = err.Error()
		if strings.Contains(err.Error(), "401") {
			ErrInfo = "请检查openAIKey是否有效" + err.Error()
			toast.SysInfo("处理异常 请检查openAIKey是否有效", err.Error())
		} else {
			toast.SysInfo("处理异常", err.Error())
		}
	}

	err = dbservice.ChatDialog().UpdateAiRespond(
		s.CurrChatAiContent.ID,
		&dbdto.ChatContentUpdate{
			Content:   resultText,
			IsHanding: false,
			IsError:   isError,
			ErrorMsg:  ErrInfo,
			UseTime:   useTimeFloat,
		})
	if err != nil {
		mylog.Error(err.Error())
		return
	}

	aiContent := dbservice.ChatDialog().GetContentInfoById(s.CurrChatAiContent.ID)

	// 使用dbservice调用ChatDialog方法获取aiContentInfo.ID对应的内容信息，并将结果赋给aiContent变量
	s.CurrChatAiContent = aiContent

	s.IsHandingTask = false
	if aiContent == nil {
		return
	}

	//完成后操作
	completeHandler(s.CurrToolInfo.CompleteDo, s.CurrChatDialogId, aiContent)

}
